/**
 * Heap.java
 * Descripción: Interfaz para un heap, que es un BinaryTree cuya raíz siempre
 *              es el menor de los elementos.
 * NOTA: Por simplicidad, aunque un Heap es un BinaryTree, esta interfaz no extenderá
 *       la de BinaryTree, ya que las operaciones que nos interesan hacer con el Heap (para ordenar de menor a mayor)
 *       son totalmente distintas a las que nos interesan hacer con el BinaryTree (para organizar el árbol de Huffman).
 * Inspirado en el libro JavaStructures de Duane Bailey, 2007 (C).
 * @author Oscar Castañeda 11086
 * @since 11/09/2012
 * @version 1.0
 */

public interface Heap<E>{
    
    /**
     * @pre El heap existe.
     * @post El heap devuelve el siguiente elemento, según corresponda a la manera en que ordena a los objetos.
     *       Dicho elemento es retirado del heap.
     */
    public E getNext();
    
    /**
     * @pre El heap existe.
     * @post Se añade un elemento al heap, quedando este en su posición adecuada según el orden establecido.
     */
    public void add(E newElement);
    
    /**
     * @pre El heap existe.
     * @post Se devuelve el número de elementos que se encuentran dentro del heap.
     */
    public int size();
    
    /**
     * @pre El heap existe.
     * @post Devuelve false si el heap tiene al menos un elemento; true si está vacío.
     */
    public boolean isEmpty();
    
    /**
     * @pre El heap existe.
     * @post El heap está vacío.
     */
    public void reset();
}
